home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene 96
/
Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso
/
misc
/
coding
/
5tinydms
/
frm.si
< prev
next >
Wrap
Text File
|
1995-11-24
|
2KB
|
126 lines
**********************************************
* *
* A simple way of switching the CPU in FRM, *
* featuring up to 4Gb of linear memory ! *
* (c)oderight LCA/Infiny and Jedi/Sector One *
* *
**********************************************
* Set the CPU in Flat-Real-Mode : enjoy 4Gb of linear memory !
initFRM pusha.l
pushf
smsw a
test.b #1,a
beq okay
move cs,d
move d,ds
move #lame,d
move.b #9,ah
trap #$21
move #$4cff,a
trap #$21
lame dc.b "Hey ! This program is good enough to manage its memory itself."
dc.b 13,10
dc.b "Please remove your memory manager (EMM, QEMM...) and try again."
dc.b 13,10,'$'
!ptrCode set 8
!ptrData set 16
!cSizeGDT set 24
okay move ds,d
move cs,a
move a,ds
move a,currentSeg
movezx.l ax,ae
shl.l #4,a
move.l a,b
lea segmentGDT,si
move a,!ptrCode+2(si)
move a,!ptrData+2(si)
ror.l #16,a
move.b a,!ptrCode+4(si)
move.b a,!ptrData+4(si)
move.b #0,!ptrCode+7(si)
move.b #0,!ptrData+7(si)
xor.l a,a
move si,a
add.l a,b
move #!cSizeGDT,pointerGDT
move.l b,pointerGDT+2
intoff
in.b #$70,a
cs:move.b a,saveNMI+1
or.b #$80,a
out.b a,$70
lgdt pointerGDT
move ss,b
move es,c
move.l cr0,a
or.b #1,a
move.l a,cr0
dc.b $66,$ea
dc.w pMode,0
dc.w !ptrCode
pMode move #!ptrData,a
move a,ds
move a,es
move a,fs
move a,gs
move a,ss
move.l cr0,a
and.b #254,a
move.l a,cr0
dc.b $66,$ea
dc.w rMode,0
currentSeg
dc.w 0
rMode move b,ss
move d,ds
move c,es
xor a,a
move a,fs
move a,gs
saveNMI move.b #$12,a
out.b a,$70
inton
popf
popa.l
rts
align.l
pointerGDT
ds.l 2
segmentGDT
ds.w 4
dc.w $ffff,0
dc.b 0,$9a
dc.w $9f
dc.w $ffff,0
dc.b 0,$92
dc.w $9f